package builder;

/**
 * 礼物
 * 冷酷、温暖、可爱、嚣张 -> 一条路线在发展（虚拟类型）
 * 花、书、玩具         -> 一条实体的路线在发展
 */

// 虚拟路线
abstract class GiftType{
    GiftIpl giftIpl; // 虚拟路线需要手握实现类型。
    abstract public void say();
}

class WarmGift extends GiftType{
    public WarmGift(GiftIpl giftIpl){
        this.giftIpl = giftIpl;
    }
    public void say(){
        System.out.println("温暖的");
        giftIpl.say();
    }
}

class CoolGift extends GiftType{
    public CoolGift(GiftIpl giftIpl){
        this.giftIpl = giftIpl;
    }
    public void say(){
        System.out.println("冷酷的");
        giftIpl.say();
    }
}

// 实体的路线
interface GiftIpl{
    void say();
}
class Book implements GiftIpl{

    @Override
    public void say() {
        System.out.println("book");
    }
}
class Flower implements GiftIpl{

    @Override
    public void say() {
        System.out.println("flower");
    }
}

public class Bridge {
    public static void main(String [] args){
        System.out.println("Bridge");

        // 组合起来就是 类型的什么礼物

        // 比如 冷酷的书 WarmGift冷酷的 Book 书
        GiftType warmGift = new CoolGift(new Flower());
        warmGift.say();
    }
}
